EE263 Homework 2
课程主页:https://see.stanford.edu/Course/EE263
这次回顾EE263作业2。
3.2
(a)令
如果$p,\tilde p$无法识别,那么
即$p-\tilde p \in \mathcal N(A)$。
(b)题目的含义是问,是否存在非负系数$a_1,a_2,a_3$,使得
显然,这和$A\left[ \begin{array}{lll}{u} & {v} & {w}\end{array}\right]$有关,所以不一定成立。
(c)利用(b)求解即可:
%(c)
A = [L_coefficients; M_coefficients; S_coefficients];
b = A * test_light;
B = A * [ R_phosphor; G_phosphor; B_phosphor;]';
coef = B \b;
coef
coef =
0.4226
0.0987
0.5286
(d)Beth正确。令$r_i, \tilde r_i$为两个物体的反射率,$p$为光谱,如果
那么
这说明要使得等式成立,必然有$p\in \mathcal N(A(R-\tilde R))$,所以如果$p\notin \mathcal N(A(R-\tilde R))$,那么该关系并不能成立。
3.3
所以
3.10
(a)因为二次函数大于等于$0$恒成立,所以
等号成立当且仅当
此时存在$\lambda $,使得
(b)
(c)化简$(v+\lambda w)^{T}(v+\lambda w)$可得
对该式应用(a)(b)得到
(d)由(a)可知,此时存在$\lambda $使得
所以存在$\lambda $使得
所以当$v,w$平行时,等号成立。
3.11
(a)$\mathcal R(G)$表示所有可能的$y$。
(b)$\mathcal N(H)$表示使得解码结果为$0$的编码,特别的,如果$v\in \mathcal N(H)$,那么
(c)题目的要求是,找到$H$,使得
- 存在$G$,使得$HG=I_3$
- $He_i = 0, i=1,2,3$(一位非$0$的向量输出为$0$)
由第二个条件可得$H$每一列都是$0$,所以$H$所有元素全为$0$,这就与第一个条件矛盾,因此无法构造。
3.16
由定义可得
记
那么线性方程组为
要使得上述方程对任意$\rho $有唯一解,那么$P$列满秩即可,即
3.17
(a)错误,例如
(b)错误,例如
(c)正确,因为$A,B$为onto,所以存在$A_1,B_1$,使得
那么
(d)错误,例如
(e)正确,因为$\left[ \begin{array}{l}{A} \\ {B}\end{array}\right]$为onto,所以该矩阵的行向量线性无关,因此$A$的行向量线性无关,$B$的行向量无关,即$A,B$都是onto
(f)正确,记
如果
那么
因此
由条件可知$A$列向量线性无关,所以
因此列向量线性无关,即列满秩,因此结论成立。
补充题
1
由仿射函数的定义可得,存在$A\in \mathbb R^{2\times 3},b\in \mathbb R^2$,使得
现在的条件为
我们的目标是解出$A,b$,现在将后面三个式子减去第一个式子得到
记
因此上述方程可以合并为
如果$\tilde P$可逆,那么
求解出$A$之后,带入任意一个式子即可得到$b$:
这部分代码如下:
import numpy as np
#数据
P_1 = np.array([10, 10, 10])
P_2 = np.array([100, 10, 10])
P_3 = np.array([10, 100, 10])
P_4 = np.array([10, 10, 100])
T_1 = np.array([27, 29])
T_2 = np.array([45, 37])
T_3 = np.array([41, 49])
T_4 = np.array([35, 55])
#计算
P = np.c_[P_2-P_1, P_3-P_1, P_4-P_1]
T = np.c_[T_2-T_1, T_3-T_1, T_4-T_1]
A = T.dot(np.linalg.inv(P))
b = T_1 - A.dot(P_1)
print("A =", A)
print("b =", b)
A = [[0.2 0.15555556 0.08888889]
[0.08888889 0.22222222 0.28888889]]
b = [22.55555556 23. ]
现在假设
那么
要使得
那么
求解该线性方程组即可,注意该问题中$a_{ij}>0$,所以
这部分代码如下:
T0 = 70
tmp = (T0 - b) / np.sum(A, axis=1)
pmin = np.min(tmp)
print("p_min =", pmin)
p_min = 78.33333333333333
2
由条件可得
由条件可得
所以只要计算$t=\frac{| a|}{| b|}$的范围即可。
由条件可得
即
求解该方程即可,对应代码如下:
import numpy as np
eta_ab = 0.1
a1 = 1 - eta_ab ** 2
b1 = 2
c1 = 1
b2 = -2
def solve(a, b, c):
delta = b ** 2 - 4 * a * c
x1 = (-b - np.sqrt(delta)) / (2 * a)
x2 = (-b + np.sqrt(delta)) / (2 * a)
return x1, x2
t1, t2 = solve(a1, b1, c1)
t3, t4 = solve(a1, b2, c1)
print(t1, t2)
print(t3, t4)
tmin = t3
tmax = t4
eta_bamin = eta_ab * tmin
eta_bamax = eta_ab * tmax
print("eta_ba的最小值为{}".format(eta_bamin))
print("eta_ba的最大值为{}".format(eta_bamax))
-1.1111111111111112 -0.9090909090909091
0.9090909090909091 1.1111111111111112
eta_ba的最小值为0.09090909090909091
eta_ba的最大值为0.11111111111111112
接着求解$\theta = \angle (a,b)$的范围,依然利用定义:
所以
即
因为
所以$\cos(\theta)>0$,即
求解得到:
#求角度
theta_min = 0
theta_max = np.arccos(np.sqrt(1-eta_ab**2))
print("theta的最小值为{}".format(theta_min))
print("theta的最大值为{}".format(theta_max))
theta的最小值为0
theta的最大值为0.10016742116155969
3
利用matlab如下命令即可:
rank([F g])==rank(F)
依次删除某行的数据,记删除后的矩阵为$A_1, y_1$,之后判断$[A_1, y_1]$的秩是否和$A_1$的秩相等即可,如果相等,则出错的位置为删除的行:
n = length(ytilde);
flag = 0;
for i = 1:n
index = [1:(i-1) (i+1):n];
A1 = A(index, :);
y1 = ytilde(index);
res = (rank([A1 y1])==rank(A1));
if res == 1
flag = i;
break;
end
end
fprintf("第%d个传感器出错\n", flag);
第11个传感器出错